function results = am_histlegend(results)
% PURPOSE: compute legend figure for histmap
% returns an n x 3 matrix of colors that can be used to label the map polygons
% and a handle to the legend figure

cmap = results.cmap;
nbc = results.nbc;
variable = results.cvariable; % we access this in case the user has 
                              % changed to a subset of the sample data 
missing = results.cmissing;   % missing observations in the face of a zoom

vindex = results.vindex;
vflag = results.vflag;
vnames = results.vnames;
if vflag == 1
vname = vnames(vindex,:);
elseif vflag == 0
vname = vnames(vindex+1,:);
end;

svec = get(0,'ScreenSize');
if svec(3) > 1300
width = 400; height = 400;
elseif svec(3) > 1000
width = 400; height = 400;
elseif svec(3) == 800
error('arc_histmap: you need a higher screen resolution than 800x600 to use arc_map');
end;
if (results.legend_fig == 0)
	if results.legendmenu == 0
	legend_fig = figure('Position',[results.width+60 100 width height], ... % [left bottom width height]
                      'NumberTitle','off', ...
                      'Name','Map Legend', ...
                      'MenuBar','none');
	elseif results.legendmenu == 1
	legend_fig = figure('Position',[results.width+60 100 width height], ... % [left bottom width height]
                      'NumberTitle','off', ...
                      'Name','Map Legend');
	end;
	results.legend_fig = legend_fig;
else
figure(results.legend_fig);
end;
hc = colormap(cmap);

% hc is always 64 by 3 matrix
incr = floor(64/nbc);
cindex = 1:incr:64;
cindex = cindex(1:nbc);
hcolor = hc(cindex,:);

% adjust the legend for missing values
mindex = find(missing == 1);
if length(mindex) > 0
wvariable = variable(mindex,1);
else
wvariable = variable;
end;

% Trace the histogram
edge=[min(wvariable):(max(wvariable)-min(wvariable))/nbc:max(wvariable)-(max(wvariable)-min(wvariable))/nbc];
edge2=[edge,inf];
[N,binpoints]=histc(wvariable,edge2);
N=N(1:end-1);
% form a set of nbc polygons to use with fill
nbars = length(unique(binpoints));
edges = edge2;
edges(end) = max(wvariable);
bari = unique(binpoints);
if nbars > 1
clf;
hold on;
	for i=1:nbars;
	j = bari(i);
	xc = [edges(j) edges(j) edges(j+1) edges(j+1)];
	yc = [0 N(j) N(j) 0];
	bar_h(i) = fill(xc,yc,hcolor(j,:));
	end;
hold off;
xlabel(vname);
nobs = length(variable);
legend_colors = zeros(nobs,3);
cnt = 1;
for i=1:nobs;
	if results.cmissing(i) == 1
	legend_colors(i,:) = hcolor(binpoints(cnt,1),:);
	cnt = cnt+1;
	else
	legend_colors(i,:) = [1 1 1];
	end;
end;
results.map_colors = legend_colors;

elseif nbars == 1
% here we have only one color, so we kludge the legend and colormap
nobs = length(variable);
legend_colors = zeros(nobs,3);
for i=1:nobs;
	if results.cmissing(i) == 1
	legend_colors(i,:) = [1 1 1];
	else
	legend_colors(i,:) = [1 1 1];
	end;
end;
results.map_colors = legend_colors;
% put a message in the legend figure window for the user
figure(results.legend_fig);
clf;
	Hwarning=uicontrol('Style','text','Units','Normalized','Position',[0.1,0.1,1,0.035],'Backgroundcolor',[1 1 1], ...
     'String',['Only 1 value for this variable'],'enable','inactive','FontSize',6,'HorizontalAlignment','left');
% warning('arc_histmap: you must select at least 2 polygons for the legend');
end;


